package comum;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * Metodo que possui atributos e metodos necessarios para enviar uma mensagem tcp
 * @author gbomfim
 *
 */
public class Mensagem {
	
	protected String ip;
	protected int port;
	protected String type;
	protected String message;
	
	protected String response = new String();
	
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}

	public int getPort() {
		return port;
	}
	public void setPort(int port) {
		this.port = port;
	}

	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}

	
	public String getMessageString (){
		return new String(this.message);
	}
	
	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}
	
//	public void setMessage(byte[] buffer) {
//		this.message = buffer;
//	}
//	
	
	/**
	 * Classe que cria e envia o pacote, a partir dos atributos da propria classe Mensagem.
	 * E utilizado na primeira conexao entre o servidor e o cliente , afim de estabelecer porta e informar um novo usuario ao servidor.
	 *  
	 * @return boolean de sucesso ou erro
	 */
	public boolean send() {
		
		Socket socket;
		try {

			socket = new Socket(this.getIp(), this.getPort());
			
			PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
			out.println(this.getMessage());
			BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String inputline;
			while ((inputline = in.readLine()) != null) {
				this.response  += inputline +"\n";	
			}
					
			out.close();
			in.close();
			socket.close();
			
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
	}
	public String getResponse() {
		return response;
	}
	public void setResponse(String response) {
		this.response = response;
	}
}
